=begin
##################################################  #############################
#                                                                             #
#          						    	 Валюта (Game Currency)  	  				   	          #
#                                                                             #
##################################################  #############################
Автор: Денис Кузнецов (
http://vk.com/id8137201)
Группа ВК: 
https://vk.com/scriptsrpgmakervxace
Версия: 1.1
Релиз от: 14.08.15
Первый релиз: 13.08.15
Что нового в этой версии:
- Добавил новый вызов скрита
- Добавил сохранение/загрузку одной настройки вместе с игрой
- Убрал коэффициенты
- Изменено название одного вызова скрипта, а также некоторые параметры вызовов
- Баг фикс Window_Gold, Window_Window_ShopNumber и Scene_Shop
Инструкция:
Получить текущее количество денег текущей валюты:
	get_game_currency_value
Получить номер текущей валюты:
	get_game_currency_type
Получить номер валюты, использованной в предыдущий раз:
	get_game_last_currency_type
	
Установить значение для текущей валюты:
	set_game_currency_value(value)
	
Установить номер валюты для использования:
	set_game_currency_type(currency_type)
	
Перенести деньги с одной валюты на другую:
type1 - откуда перенести
type2 - куда перенести
rate - значение коэффициента переноса (type1 * rate) (по-умолчанию равен 1)
	game_exchange_currency(type1, type2, rate)
	
Увеличить значение валюты:
currency_type - номер валюты
amount - значение
	game_gain_currency(currency_type, amount)
Уменьшить значение валюты:
	game_lose_currency(currency_type, amount)
Установить отображение только текущей валюты в окне золота (Window_Gold):
setup - true или false (только текущее значение или нет)
	set_game_window_gold_current_currency(setup)
Для справки о совместимости с другими скриптами:
	В данном скрипте переписаны/дополнены стандартные классы
	### module Vocab ###
	Переписанные методы:
	self.currency_unit(currency_type = nil)
	### class Game_Party ###
	Новые методы:
	init_currency
	currency_value=(currency_value)
	currency_type=(currency_type)
	exchange_currency(type1, type2, rate)
	gold
	Дополненные методы:
	initialize
	
	Переписанные методы:
	gain_gold(amount)
	### class Window_Gold ###
	Новые методы:
	value_width
	type
	Дополненные методы:
	initialize
	update
	draw_currency_value(value, unit, x, y, width)
	Переписанные методы:
	value
	currency_unit
	
	### class Window_ShopNumber ###
	Дополненные методы:
	initialize(x, y, height)
	set(item, max, price, currency_unit = nil)
	draw_currency_value(value, unit, x, y, width)
	Переписанные методы:
	currency_unit=(currency_unit)
	### class Scene_Shop ###
	Переписанные методы:
	money
	currency_unit
=end
module Currency_Settings
	
	# Какую валюту использовать в начале игры ?
	GAME_CURRENCY_START_TYPE = 0
	
	# Настройка валют
	# номер_валюты => { :name => "символ_валюты", :start_value => значение (количество валюты в начале игры (можно не указывать этот параметр)) }
	GAME_CURRENCY = {
		0 => { :name => "Gil" },
		1 => { :name => "$", :start_value => 5000 },
		2 => { :name => "€", :start_value => 2000 }
	}
	
	# Настройка иконок для отображения в окне денег
	# Если не указана иконка, то будет отображаться символ валюты
	# номер_валюты => номер_иконки
	# GAME_CURRENCY_WINDOW_GOLD_ICON = { } чтобы не использовать
	GAME_CURRENCY_WINDOW_GOLD_ICON = {
		0 => 341,
		1 => 361,
		#~ 2 => 360
	}
	
	# Отображать только используемую на данный момент валюту ?
	# true - да, false - нет
	$GAME_CURRENCY_WINDOW_GOLD_CURRENT_CURRENCY = false
	
end # module Currency_Settings
module Vocab
	
	def self.currency_unit(currency_type = nil)
		if currency_type.nil?
			Currency_Settings::GAME_CURRENCY[$game_party.currency_type][:name]
		else
			Currency_Settings::GAME_CURRENCY[currency_type][:name]
		end
	end
	
end # module Vocab
class Game_Party < Game_Unit
	
	include Currency_Settings
	
	attr_reader :last_currency_type
	attr_reader :currency_type
	attr_reader :currency
	
	alias denis_kyznetsov_game_currency_game_party_initializ  e initialize
	def initialize
		denis_kyznetsov_game_currency_game_party_initializ  e
		@last_currency_type = GAME_CURRENCY_START_TYPE
		@currency_type = GAME_CURRENCY_START_TYPE
		init_currency
	end
	
	def init_currency
		return if !@currency.nil?
		@currency = {}
		GAME_CURRENCY.keys.each do |index|
			value = GAME_CURRENCY[index].has_key?(:start_value) ? GAME_CURRENCY[index][:start_value] : 0
			@currency[index] = value
		end
	end
	
	def currency_value=(currency_value)
		@currency[@currency_type] = currency_value
	end
	
	def currency_type=(currency_type)
		@last_currency_type = @currency_type
		@currency_type = currency_type
	end
	
	def exchange_currency(type1, type2, rate)
		@currency[type2] += (@currency[type1] * rate).to_i
		@currency[type1] = 0
	end
	
	def gold
		return @currency[@currency_type]
	end
	
	def gain_gold(amount)
		@currency[@currency_type] = [[@currency[@currency_type] + amount, -max_gold].max, max_gold].min
	end
	
end # class Game_Party < Game_Unit
class Game_Interpreter
	
	include Currency_Settings
	
	def set_game_window_gold_current_currency(setup)
		$GAME_CURRENCY_WINDOW_GOLD_CURRENT_CURRENCY = setup
	end
	
	def get_game_currency_value
		return $game_party.gold
	end
	
	def get_game_currency_type
		return $game_party.currency_type
	end
	
	def get_game_last_currency_type
		return $game_party.last_currency_type
	end
	
	def set_game_currency_value(value)
		$game_party.currency_value = value
	end
	
	def set_game_currency_type(currency_type)
		return if !GAME_CURRENCY.has_key?(currency_type)
		$game_party.currency_type = currency_type
	end
	
	def game_exchange_currency(type1, type2, rate = 1)
		return if !GAME_CURRENCY.has_key?(type1) || !GAME_CURRENCY.has_key?(type2)
		$game_party.exchange_currency(type1, type2, rate)
	end
	
	def game_gain_currency(currency_type, amount)
		return if !GAME_CURRENCY.has_key?(currency_type)
		last_currency = $game_party.currency_type
		game_currency_type(currency_type)
		$game_party.gain_gold(amount)
		game_currency_type(last_currency)
	end
	
	def game_lose_currency(currency_type, amount)
		game_gain_currency(currency_type, -amount)
	end
	
end # class Game_Interpreter
$imported = {} if $imported.nil?
$imported["DenKyz_Game_Currency"] = true
class Window_Gold < Window_Base
	
	include Currency_Settings
	
	alias denis_kyznetsov_game_currency_window_gold_initiali  ze initialize
	def initialize
		@currency_keys_type = 0 # номер ключа массива валют
		denis_kyznetsov_game_currency_window_gold_initiali  ze
		self.arrows_visible = false
		self.ox = -value_width if !$GAME_CURRENCY_WINDOW_GOLD_CURRENT_CURRENCY && GAME_CURRENCY.size > 1
	end
	
	alias denis_kyznetsov_game_currency_window_gold_update update
	def update
		denis_kyznetsov_game_currency_window_gold_update
		if !$GAME_CURRENCY_WINDOW_GOLD_CURRENT_CURRENCY && GAME_CURRENCY.size > 1
			self.ox += 1
			if self.ox > contents.width
				@currency_keys_type += 1
				@currency_keys_type %= $game_party.currency.keys.size
				self.ox = -value_width
				refresh
			end
		elsif $GAME_CURRENCY_WINDOW_GOLD_CURRENT_CURRENCY && self.ox != 0
			self.ox = 0
			refresh
		end
	end
	
	def value_width # ширина значения вместе с иконкой или текстом
		val_width = 24 # отступ
		val_width += text_size(currency_unit).width if !GAME_CURRENCY_WINDOW_GOLD_ICON.has_key?(type) # ширина названия валюты, если нет иконки
		val_width += text_size(value).width # ширина значения
		return val_width
	end
	
	def value # значение валюты
		if $GAME_CURRENCY_WINDOW_GOLD_CURRENT_CURRENCY
			$game_party.gold
		else
			$game_party.currency[type]
		end
	end
	
	def type # получить тип валюты из ключей
		if $GAME_CURRENCY_WINDOW_GOLD_CURRENT_CURRENCY
			$game_party.currency_type
		else
			$game_party.currency.keys[@currency_keys_type]
		end
	end
	
	def currency_unit # символ валюты
		Vocab::currency_unit(type)
	end
	
	alias denis_kyznetsov_game_currency_window_gold_draw_cur  rency_value draw_currency_value
	def draw_currency_value(value, unit, x, y, width)
		return denis_kyznetsov_game_currency_window_gold_draw_cur  rency_value(value, unit, x, y, width) if !GAME_CURRENCY_WINDOW_GOLD_ICON.has_key?(type)
		change_color(normal_color)
		draw_text(x, y, width - 16 - 2, line_height, value, 2)
		draw_icon(GAME_CURRENCY_WINDOW_GOLD_ICON[type], width - 16, y)
	end
	
end # class Window_Gold < Window_Base
class Window_ShopNumber < Window_Selectable
	
	include Currency_Settings
	
	alias denis_kyznetsov_game_currency_window_shop_number_i  nitialize initialize
	def initialize(x, y, height)
		denis_kyznetsov_game_currency_window_shop_number_i  nitialize(x, y, height)
		@currency_unit = $game_party.currency_type
	end
	
	alias denis_kyznetsov_game_currency_window_shop_number_s  et set
	def set(item, max, price, currency_unit = nil)
		denis_kyznetsov_game_currency_window_shop_number_s  et(item, max, price, currency_unit)
		@currency_unit = $game_party.currency_type if currency_unit
		refresh
	end
	
	def currency_unit=(currency_unit)
		@currency_unit = $game_party.currency_type
		refresh
	end
	
	alias denis_kyznetsov_game_currency_window_shop_number_d  raw_currency_value draw_currency_value
	def draw_currency_value(value, unit, x, y, width)
		if !GAME_CURRENCY_WINDOW_GOLD_ICON.has_key?(unit)
			unit = Vocab::currency_unit
			return denis_kyznetsov_game_currency_window_shop_number_d  raw_currency_value(value, unit, x, y, width)
		end
		change_color(normal_color)
		draw_text(x, y, width - 16 - 2, line_height, value, 2)
		draw_icon(GAME_CURRENCY_WINDOW_GOLD_ICON[unit], width - 16, y)
	end
	
end # class Window_ShopNumber < Window_Selectable
class Scene_Shop < Scene_MenuBase
	
	def money
		$game_party.gold
	end
	
	def currency_unit
		$game_party.currency_type
	end
	
end # class Scene_Shop < Scene_MenuBase
module DataManager
	
	class << self
		alias denis_kyznetsov_game_currency_data_manager_make_sa  ve_contents make_save_contents
		alias denis_kyznetsov_game_currency_data_manager_extract  _save_contents extract_save_contents
	end
	
	def self.make_save_contents
		contents = denis_kyznetsov_game_currency_data_manager_make_sa  ve_contents
		contents[:GAME_CURRENCY_WINDOW_GOLD_CURRENT_CURRENCY] = $GAME_CURRENCY_WINDOW_GOLD_CURRENT_CURRENCY
		contents
	end
	
	def self.extract_save_contents(contents)
		denis_kyznetsov_game_currency_data_manager_extract  _save_contents(contents)
		$GAME_CURRENCY_WINDOW_GOLD_CURRENT_CURRENCY = contents[:GAME_CURRENCY_WINDOW_GOLD_CURRENT_CURRENCY]
	end
	
end # module DataManager
Социальные закладки